package com.doubao.chat.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.doubao.chat.dto.ChatMessageDTO;
import com.doubao.chat.dto.request.*;
import com.doubao.chat.entity.ChatMessage;
import com.doubao.chat.entity.ChatSession;
import com.doubao.common.result.Result;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

/**
 * 聊天消息服务接口
 */
public interface ChatMessageService extends IService<ChatMessage> {

    /**
     * 发送消息并返回回复
     *
     * @param userId  用户ID
     * @param request 发送消息请求
     * @return 回复消息
     */
    Result<ChatMessageDTO> sendMessage(Long userId, SendMessageRequest request);

    /**
     * 流式发送消息
     *
     * @param userId  用户ID
     * @param request 发送消息请求
     * @return SSE发射器
     */
    SseEmitter sendMessageStream(Long userId, SendMessageRequest request);

    /**
     * 获取会话消息列表
     *
     * @param userId  用户ID
     * @param request 获取消息列表请求
     * @return 消息列表
     */
    Result<IPage<ChatMessageDTO>> getMessageList(Long userId, GetMessageListRequest request);

    /**
     * 删除消息
     *
     * @param userId    用户ID
     * @param messageId 消息ID
     * @return 删除结果
     */
    Result<Void> deleteMessage(Long userId, Long messageId);

    /**
     * 重新生成回复
     *
     * @param userId    用户ID
     * @param sessionId 会话ID
     * @param messageId 消息ID
     * @return 新回复消息
     */
    Result<ChatMessageDTO> regenerateMessage(Long userId, Long sessionId, Long messageId);

    /**
     * 文本转语音
     *
     * @param userId  用户ID
     * @param request 文本转语音请求
     * @return 语音URL
     */
    Result<String> textToSpeech(Long userId, TextToSpeechRequest request);
}

